package com.york.jobmew.subject.infra.basic.service.impl;

import com.york.jobmew.subject.infra.basic.entity.SubjectInfo;
import com.york.jobmew.subject.infra.basic.mapper.SubjectInfoDao;
import com.york.jobmew.subject.infra.basic.service.SubjectInfoService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 题目信息表(SubjectInfo)表服务实现类
 */
@Service("subjectInfoService")
public class SubjectInfoServiceImpl implements SubjectInfoService {

    @Resource
    private SubjectInfoDao subjectInfoDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public SubjectInfo queryById(Long id) {
        return this.subjectInfoDao.queryById(id);
    }

    /**
     * 新增数据
     *
     * @param subjectInfo 实例对象
     * @return 实例对象
     */
    @Override
    public SubjectInfo insert(SubjectInfo subjectInfo) {
        this.subjectInfoDao.insert(subjectInfo);
        return subjectInfo;
    }

    /**
     * 修改数据
     *
     * @param subjectInfo 实例对象
     * @return 实例对象
     */
    @Override
    public SubjectInfo update(SubjectInfo subjectInfo) {
        this.subjectInfoDao.update(subjectInfo);
        return this.queryById(subjectInfo.getId());
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Long id) {
        return this.subjectInfoDao.deleteById(id) > 0;
    }

    /**
     * 根据条件计数有多少题目，用于条件筛选记录分页总数
     *
     * @param subjectInfo 题目信息实例对象，包含筛选条件
     * @param categoryId  分类ID，用于筛选题目所属分类
     * @param labelId     标签ID，用于筛选题目所属标签
     * @return 符合条件的题目总数
     */
    @Override
    public int countByCondition(SubjectInfo subjectInfo, Long categoryId, Long labelId) {
        return this.subjectInfoDao.countByCondition(subjectInfo, categoryId, labelId);
    }

    /**
     * 分页查询题目信息
     *
     * @param subjectInfo 题目信息实例对象，包含筛选条件
     * @param categoryId  分类ID，用于筛选题目所属分类
     * @param labelId     标签ID，用于筛选题目所属标签
     * @param start       分页起始位置
     * @param pageSize    每页大小
     * @return 符合条件的题目信息列表
     */
    @Override
    public List<SubjectInfo> queryPage(SubjectInfo subjectInfo, Long categoryId, Long labelId, int start, Integer pageSize) {
        return this.subjectInfoDao.queryPage(subjectInfo, categoryId, labelId, start, pageSize);
    }

    /**
     * 获取题目贡献统计信息
     *
     * @return 题目贡献统计信息列表
     */
    @Override
    public List<SubjectInfo> getContributeCount() {
        return this.subjectInfoDao.getContributeCount();
    }


    /**
     * 查询题目ID游标
     *
     * @param subjectId  当前题目ID，用于定位游标
     * @param categoryId 分类ID，用于筛选题目所属分类
     * @param labelId    标签ID，用于筛选题目所属标签
     * @param cursor     游标方向，1表示下一个，-1表示上一个
     * @return 游标指向的题目ID
     */
    @Override
    public Long querySubjectIdCursor(Long subjectId, Long categoryId, Long labelId, int cursor) {
        return this.subjectInfoDao.querySubjectIdCursor(subjectId, categoryId, labelId, cursor);
    }

}
